package es.albarregas.dao;

import java.sql.SQLException;

import java.util.ArrayList;
import java.util.Collection;

import es.albarregas.pojo.LineaPedido;

public class LineaPedidoDAO extends ConexionDAO {
	
	private static final String INCUNIDAD = 
			"update lineaspedidos set Cantidad=Cantidad+1 where NumeroPedido=? " +
			" and NumeroLinea=? and CodigoProducto=?";
	private static final String INSERTAR = 
			"insert into lineaspedidos (NumeroPedido,NumeroLinea," +
			"CodigoProducto,Cantidad,PrecioUnitario,NombreProducto) values(?,?,?,?,?,?)";
		
	public int crearLineaPedido(LineaPedido lineaPedido){
		int codigoSQL = 0;		
		try {
			getConexion();
			estamento = conexion.createStatement();
			resultado = estamento.executeQuery
				("select max(NumeroLinea) as linea from lineaspedidos where NumeroPedido=" +
				lineaPedido.getNumeroPedido());
			
			if(resultado.next()){
				lineaPedido.setNumeroLinea(resultado.getInt("linea") + 1);
			} else {
				lineaPedido.setNumeroLinea(1);
			}
		} catch(SQLException ex){
			codigoSQL = ex.getErrorCode();
			ex.printStackTrace();
		} finally {
			cerrar();
		}
		if(codigoSQL==0){
			try {
				getConexion();
				preparada = conexion.prepareStatement(INSERTAR);
				preparada.setInt(1, lineaPedido.getNumeroPedido());
				preparada.setInt(2, lineaPedido.getNumeroLinea());
				preparada.setString(3, lineaPedido.getCodigoProducto());
				preparada.setInt(4, 1);
				preparada.setDouble(5, lineaPedido.getPrecioUnitario());
				preparada.setString(6, lineaPedido.getNombreProducto());
				preparada.executeUpdate();
			} catch(SQLException ex){
				codigoSQL = ex.getErrorCode();
				ex.printStackTrace();
			} finally {
				cerrar();
			}
		}
		return codigoSQL;
	}
	
	public Collection<LineaPedido> leerLineaPedido(String clausulaWhere){
		Collection<LineaPedido> lista = new ArrayList<LineaPedido>();
		try {
			getConexion();
			estamento = conexion.createStatement();
			String cadenaSQL="select * from lineaspedidos " + clausulaWhere;
			System.out.println("Cadena sql de LineaPedidoDAO-->"+cadenaSQL);
			resultado = estamento.executeQuery(cadenaSQL);
			while(resultado.next()){
				LineaPedido lineaPedido = new LineaPedido();
				lineaPedido.setNumeroPedido(resultado.getInt("NumeroPedido"));
				lineaPedido.setNumeroLinea(resultado.getInt("NumeroLinea"));
				lineaPedido.setCodigoProducto(resultado.getString("CodigoProducto"));
				lineaPedido.setCantidad(resultado.getInt("Cantidad"));
				lineaPedido.setPrecioUnitario(resultado.getDouble("PrecioUnitario"));
				lineaPedido.setNombreProducto(resultado.getString("NombreProducto"));
				lista.add(lineaPedido);
			}
		} catch(SQLException ex){
			ex.printStackTrace();
		} finally {
			cerrar();
		}
//		System.out.println("Coleccion en udao " + lista.isEmpty());
		return lista;
		
	}
//	
	public int updateLineaPedido(LineaPedido lineaPedido){
		int codigoSQL = 0;
		
		try {
			getConexion();
			preparada = conexion.prepareStatement(INCUNIDAD);
			preparada.setInt(1, lineaPedido.getNumeroPedido());
			preparada.setInt(2, lineaPedido.getNumeroLinea());
			preparada.setString(3, lineaPedido.getCodigoProducto());
			preparada.executeUpdate();
		} catch(SQLException ex){
			codigoSQL = ex.getErrorCode();
			ex.printStackTrace();
		} finally {
			cerrar();
		}
		return codigoSQL;
	}
	public int updateLineaPedidoCompleta(LineaPedido lineaPedido){
		int codigoSQL = 0;
		String sentenciaSQL=" UPDATE lineaspedidos " +
				"SET NumeroPedido =?,NumeroLinea =?,CodigoProducto =?,Cantidad =?,PrecioUnitario=?,NombreProducto=? " +
				"WHERE NumeroPedido = ? AND NumeroLinea=?";
		
		try {
			getConexion();
			preparada = conexion.prepareStatement(sentenciaSQL);
			preparada.setInt(1, lineaPedido.getNumeroPedido());
			preparada.setInt(2, lineaPedido.getNumeroLinea());
			preparada.setString(3, lineaPedido.getCodigoProducto());
			preparada.setDouble(4, lineaPedido.getCantidad());
			preparada.setDouble(5, lineaPedido.getPrecioUnitario());
			preparada.setString(6, lineaPedido.getNombreProducto());
			preparada.setInt(7, lineaPedido.getNumeroPedido());
			preparada.setInt(8, lineaPedido.getNumeroLinea());
			preparada.executeUpdate();
		} catch(SQLException ex){
			codigoSQL = ex.getErrorCode();
			ex.printStackTrace();
		} finally {
			cerrar();
		}
		return codigoSQL;
	}
	public void BorrarLineaPedido(String clausulaWhere ){
		int codigoSQL = 0;
		try {
			getConexion();			
			String sentenciaSQL="DELETE from lineaspedidos "+clausulaWhere;
			//TODO QUITAR
			System.out.println("Consulta para eliminar pedido -->"+sentenciaSQL);
			estamento = conexion.createStatement();
			estamento.executeUpdate(sentenciaSQL);			
		} catch(SQLException ex){
			codigoSQL = ex.getErrorCode();
			ex.printStackTrace();
		} finally {
			cerrar();
		}
		
	}
//	
	
}
